package com.data.common.constant.enums;


import cn.hutool.core.util.ObjectUtil;
import com.data.common.exception.BootException;

/**
 * 审批状态枚举类
 */
public enum ApprovaStateEnum {


    /**
     *
     * PENDING - 进行中
     * APPROVED - 已通过
     * REJECTED - 已拒绝
     * CANCELED - 已撤回
     * DELETED - 已删除
     * REVERTED - 已撤销
     * TRANSFERRED - 已转交
     *
     *
     * 审批任务状态变更
     * 审批人同意/拒绝/转交 审批任务后，会向开发者推送审批任务状态消息。
     *
     * 用户创建审批后，推送第一个审批节点的审批任务【PENDING】状态
     * 如果当前节点是会签(AND)节点
     * 任一审批任务被同意，推送该任务的【APPROVED】状态
     * 任一审批任务被拒绝，推送该任务的【REJECTED】状态，当前节点其他剩余任务的【DONE】状态
     * 如果当前节点是或签(OR)节点
     * 任一审批任务被同意，推送该任务的【APPROVED】状态，当前节点其他剩余任务的【DONE】状态，下一个节点所有任务的【PENDING】状态
     * 任一审批任务被拒绝，推送该任务的【REJECTED】状态，当前节点其他所有任务的【DONE】状态
     * 如果用户对审批任务进行转交，推送该任务的【TRANSFERRED】状态，和被转交人任务的【PENDING】状态
     * 发起人撤回审批后，推送剩余所有任务的【DONE】状态
     * 审批定义被管理员删除后，推送剩余所有任务的【DONE】状态
     *
     */
    PENDING("PENDING" , "进行中"),
    APPROVED("APPROVED", "已通过"),
    REJECTED("REJECTED", "已拒绝"),
    CANCELED("CANCELED", "已撤回"),
    DELETED("DELETED", "已删除"),
    REVERTED("REVERTED", "已撤销"),
    TRANSFERRED("REVERTED", "已转交"),
    DONE("DONE", "完毕"),
    ;

    private String info;
    private String msg;

    public String getInfo() {
        return this.info;
    }

    public String getMsg() {
        return this.msg;
    }


     ApprovaStateEnum(String info, String msg) {
        this.info = info;
        this.msg = msg;
    }
    public static ApprovaStateEnum parse(String info) {
        for (ApprovaStateEnum approvaStateEnum : ApprovaStateEnum.values()) {
            if (ObjectUtil.equal(approvaStateEnum.getInfo(),info)) {
                return approvaStateEnum;
            }
        }
        throw new BootException("参数验证错误");
    }

    @Override
    public String toString() {
        return "ContractEnum{" +
                "info='" + info + '\'' +
                ", msg='" + msg + '\'' +
                '}';
    }


}
